package com.mars.service;

import com.google.common.collect.Lists;
import com.mars.dto.AclDto;
import com.mars.dto.AclModuleLevelDto;
import com.mars.dto.Menu;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 左侧菜单栏
 * @author MARS
 * @date 2018/1/30
 */

@Service
public class SysMenuService {

    public List<Menu> changeTreeToMenu(List<AclModuleLevelDto> aclModuleLevelDtoList) {
        List<Menu> menuList = Lists.newArrayList();
        if (CollectionUtils.isEmpty(aclModuleLevelDtoList)) {
            return menuList;
        }

        // 处理菜单
        // 无限层级处理(目前处理两层)
        for (AclModuleLevelDto firstLevel : aclModuleLevelDtoList) {
            Menu firstLevelMenu = new Menu();
            firstLevelMenu.setId(firstLevel.getId());
            firstLevelMenu.setName(firstLevel.getName());

            // 判断是否需要增加一级菜单
            boolean needAddFirstMenu = false;

            // 先检查menu下是否已配置了有菜单的权限，有，直接使用对应的菜单，点击后跳转路径
            if (CollectionUtils.isNotEmpty(firstLevel.getAclModuleList())) {
                for (AclDto aclDto : firstLevel.getAclList()) {
                    // 类型为菜单。且配置了url
                    if (aclDto.getType() == 1 && StringUtils.isNotBlank(aclDto.getUrl())) {
                        // 正常每个模块下应该只配置一个菜单权限点，如果有多个，那是配置的有问题
                        firstLevelMenu.setUrl(aclDto.getUrl());
                        needAddFirstMenu = true;
                        break;
                    }
                }
            }
            // 目前这个菜单还没有点击跳转的url，而且下面还有子模块时，继续尝试处理下一层极
            if (StringUtils.isBlank(firstLevelMenu.getUrl()) && CollectionUtils.isNotEmpty(firstLevel.getAclModuleList())) {
                for (AclModuleLevelDto sendLevel : firstLevel.getAclModuleList()) {
                    Menu secondLevelMenu = new Menu();
                    secondLevelMenu.setId(sendLevel.getId());
                    secondLevelMenu.setName(sendLevel.getName());
                    // 是否需要增加二级菜单
                    boolean needAddSecondMenu = false ;

                    if (CollectionUtils.isNotEmpty(sendLevel.getAclList())) {
                        for (AclDto aclDto : sendLevel.getAclList()) {
                            // 类型为菜单, 且配置了url
                            if (aclDto.getType() == 1 && StringUtils.isNotBlank(aclDto.getUrl())) {
                                secondLevelMenu.setUrl(aclDto.getUrl());
                                needAddFirstMenu = true;
                                needAddSecondMenu = true;
                                break;
                            }
                        }
                    }

                    //  需要增加二级菜单
                    if (needAddSecondMenu) {
                        firstLevelMenu.addSubMenu(secondLevelMenu);
                    }
                }
            }

            // 需要增加一级菜单
            if (needAddFirstMenu ) {
                menuList.add(firstLevelMenu);
            }
        }
        return menuList;
    }

}
